import axios from 'axios';

//开发环境配置
const API_BASE_URL_DEV = 'http://localhost:8123/api';

//生产环境配置
const domainName = 'https://wuwamanus-backend-177679-9-1328161440.sh.run.tcloudbase.com';
const API_BASE_URL_PROD = domainName +'/api';

//根据环境变量自动选择基础 URL
const API_BASE_URL = process.env.NODE_ENV === 'development' ? API_BASE_URL_DEV : API_BASE_URL_PROD;

const http = axios.create({
  baseURL: API_BASE_URL,
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  },
  withCredentials: true // 发送请求时携带cookie
});

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // 检查业务错误码
    const { code, message } = response.data || {};
    if (code === 40100) {
      alert("请先登录")
      // 未登录，使用 Pinia store 处理登出
      handleUnauthorized();
      return Promise.reject(new Error(message || '未登录'));
    }
    return response;
  },
  (error) => {
    if (error.response) {
      const { status, data } = error.response;
      // 处理HTTP状态码401或业务错误码40100
      if (status === 401 || data?.code === 40100) {
        alert("请先登录")
        handleUnauthorized();
      }
      // 返回错误信息
      const errorMessage = data?.message || `请求失败 (${status})`;
      return Promise.reject(new Error(errorMessage));
    } else if (error.request) {
      return Promise.reject(new Error('网络连接失败，请检查网络设置'));
    } else {
      return Promise.reject(new Error('请求配置错误'));
    }
  }
);

// 处理未授权状态的函数
function handleUnauthorized() {
  // 动态导入避免循环依赖
  Promise.all([
    import('../stores/user.js'),
    import('../router/index.js')
  ]).then(([{ useUserStore }, { default: router }]) => {
    const userStore = useUserStore();
    userStore.logout(); // 使用 Pinia store 的 logout 方法
    router.push('/login');
  }).catch(error => {
    console.error('处理未授权状态时出错:', error);
    // 降级处理：直接清除 localStorage
    localStorage.removeItem('user');
    window.location.href = '/login';
  });
}

export default http;
export { API_BASE_URL };

